Buffering can be employed with network elements to minimize packet loss and to maintain efficient use of an egress link when an ingress link(s) supports a higher aggregate data rate than the egress link. Transmission Control Protocol (TCP) algorithms utilize congestion control algorithms that are “loss-based” in that they increase their transmission rate until they experience packet loss. In many network elements, packet loss is the result of buffer overflow, and (if the buffer is sufficiently sized) the result is that TCP effectively adjusts its average transmit rate to match the rate of the bottleneck link. However, another result of this approach is that the buffer at the head of the bottleneck link is kept nearly full during the course of the TCP connection. This nearly-full buffer creates a couple of problems for network performance. If the buffer is oversized relative to the bandwidth-delay product (BDP) of the egress link, which may be defined as the product of the data rate of the egress link and the expected average round-trip time for the TCP connections that will utilize it, then the latency created by this nearly-full buffer will have a significant, negative impact on the performance of interactive and latency sensitive traffic, such as web browsing, VoIP, video chat, etc. On the other hand, if the buffer is undersized relative to the BDP, then TCP performance may suffer, and the nearly-full buffer may not have sufficient space to handle traffic bursts, and may result in excessive packet loss and poor performance for new connections.
FIGS. 1-3 illustrate buffer occupancy diagrams where the buffer is oversized (FIG. 1), proportional (FIG. 2) and undersized (FIG. 3) relative to the BDP of a corresponding egress link. The graphs illustrate implementation of one type of TCP congestion control where a source automatically decreases packet transmission rates in response to determining a dropped packet and thereafter increases packet transmission rates in a linear fashion until determining a subsequently dropped packet. The packet drop is shown to occur for exemplary non-limiting purposes due to the buffer becoming overloaded and being unable to store a received packet where each corresponding packet drop is represented along the horizontal access with a value of “0”. A saw-tooth pattern illustrates a percent occupancy of the buffer resulting from the source decreasing and then increasing packet transmission rates as a result of failing to receive a corresponding acknowledgement (acknowledgements may be sent on a per-packet basis or on a per-window basis (multiple packets)). A link utilization overlay illustrates corresponding usage of the egress link where a value of “0” indicates zero or under utilization and a value of “1” indicates full or desired utilization (the link may continue to be utilized while the source decreases packet transmission rates as queued packets are dequeued). The buffer occupancy should vary between 0% and 100% utilization when properly sized in order to avoid a standing queue (undesirable latency—see FIG. 1) and a buffer underrun (absence of packets to transmit resulting in a link idle (“0” link value)—see FIG. 3).
FIG. 4 illustrates a buffer occupancy diagram similar to those described above when control delay (CoDel) active queue management (AQM) is implemented with an oversized buffer. For purposes of illustration, FIG. 4 shows an initial portion in which the CoDel AQM is not active, and the buffer occupancy proceeds in a manner identical to FIG. 1, followed by a subsequent portion in which the CoDel AQM is active. In the subsequent portion, the CoDel AQM instigates packet drops, e.g., prior to buffer overflow, in order to prompt the source to decrease and then increase packet transmission rates using TCP congestion control, and thus reduce or eliminate the standing queue. The subsequent, CoDel AQM portion may begin to compensate for the TCP congestion control failing to compensate for the oversized buffer (standing queue) by controlling the buffer to drop packets when being dequeued (head drop), i.e., to prevent subsequent transport of the packet over the egress link. The buffer may be controlled to head drop packets in order to engage the TCP congestion control capabilities of the source, i.e., to cause the source to decrease and then increase packet transmission rates such that buffer occupancy varies according to the illustrated saw-tooth pattern. Optionally, the CoDel AQM portion may perform other operations besides head drops, such as by including information in the header of transmitted packets to prompt similar actions from the source (e.g. Explicit Congestion Notification (ECN) marking). For non-limiting purposes, the “drops” described herein are intended to include this or similar non-drop related activities sufficient to engage the TCP congestion control capabilities of the source.
The CoDel AQM related operations, which are shown to correspond with the subsequent portion in FIG. 4, require the buffer to add a timestamp or other time marker to packets traversing therethrough, which can be a complex and problematic process. One non-limiting aspect of the present invention contemplates facilitating operations similar to CoDel AQM, i.e., utilizing buffer-based or buffer-originating packet drops, such as but not necessarily limited to drops occurring prior to overload, to facilitate engaging TCP congestion control or other related control capabilities of a source.